export let CheckPhone = (phone) => {
	//检验手机号
	let Phone = /^[1][3,4,5,6,7,8,9][0-9]{9}$/
	return Phone.test(phone)
}

export let CheckIdCard = (idCard) => {
	//检验身份证
	let Phone = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
	return Phone.test(idCard)
}

export let CheckPassWord = (password) => {
	//检验密码 
	//必须为字母加数字且长度不小于8位
	var str = password;
	if (str == null || str.length < 8) {
		return false;
	}
	var reg = new RegExp(/(?=.*\d)(?=.*[a-zA-Z])(?=.*[a-zA-Z0-9]).{8,16}/);
	if (reg.test(str)) {
		return true;
	} else {
		return false;
	}
}

export let comptime = (beginTime, endTime) => {
	var secondNum = parseInt((endTime - beginTime * 1000) / 1000); //计算时间戳差值      
	if (secondNum >= 0 && secondNum < 60) {
		return secondNum + '秒前';
	} else if (secondNum >= 60 && secondNum < 3600) {
		var nTime = parseInt(secondNum / 60);
		return nTime + '分钟前';
	} else if (secondNum >= 3600 && secondNum < 3600 * 24) {
		var nTime = parseInt(secondNum / 3600);
		return nTime + '小时前';
	} else {
		var nTime = parseInt(secondNum / 86400);
		return nTime + '天前';
	}
}

//获取身份证出生日期
export let idCardBirthday = (idNumber) => {
	let idCard = idNumber
	let birthday = ""
	if (idCard != null && idCard != "") {
		if (idCard.length == 15) {
			birthday = "19" + idCard.substr(6, 6);
		} else if (idCard.length == 18) {
			birthday = idCard.substr(6, 8);
		}
		birthday = birthday.replace(/(.{4})(.{2})/, "$1-$2-");
	}
	return birthday
}
export function IdCard(IdCard, type) {
	//获取身份证信息
	//获取出生日期
	if (type === 1) {
		let birthday = IdCard.substring(6, 10) + "-" + IdCard.substring(10, 12) + "-" + IdCard.substring(12, 14)
		return birthday
	}
	//获取性别
	if (type === 2) {
		if (parseInt(IdCard.substr(16, 1)) % 2 === 1) {
			return 1
		} else {
			return 2
		}
	}
	
	//获取年龄
	if (type === 3) {
		var ageDate = new Date()
		var month = ageDate.getMonth() + 1
		var day = ageDate.getDate()
		var age = ageDate.getFullYear() - IdCard.substring(6, 10) - 1
		if (IdCard.substring(10, 12) < month || IdCard.substring(10, 12) === month && IdCard.substring(12, 14) <= day) {
			age++
		}
		if (age <= 0) {
			age = 1
		}
		return age
	}
	
	if(type === 4){
		return idCardBirthday(IdCard)
	}
}

//时间戳转换 正常 格式
export function parseTimeNew(date, dateType) {
	/**
	 *type : yyyy-MM-dd hh:mm:ss / yyyy-MM-dd
	 */
	var ndate = new Date(date)
	let type = dateType || 'yyyy-MM-dd hh:mm:ss'
	const o = {
		'M+': ndate.getMonth() + 1, // 月份
		'd+': ndate.getDate(), // 日
		'h+': ndate.getHours(), // 小时
		'm+': ndate.getMinutes(), // 分
		's+': ndate.getSeconds(), // 秒
		'q+': Math.floor((ndate.getMonth() + 3) / 3), // 季度
		'S': ndate.getMilliseconds() // 毫秒
	}
	if (/(y+)/.test(type)) type = type.replace(RegExp.$1, (ndate.getFullYear() + '').substr(4 - RegExp.$1
		.length))
	for (const k in o) {
		if (new RegExp('(' + k + ')').test(type)) type = type.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[
				k]) :
			(('00' + o[k]).substr(('' + o[k]).length)))
	}
	return type
}
export function isHKCard(card) {
	// 港澳居民来往内地通行证
	// 规则： H/M + 10位或6位数字
	// 样本： H1234567890
	var reg = /^([A-Z]\d{6,10}(\(\w{1}\))?)$/;
	if (reg.test(card) === false) {
		return {
			'status': 0,
			'msg': '港澳居民来往内地通行证号码不合规'
		};
	} else {
		return {
			'status': 1,
		};
	}
}
export function isTWCard(card) {
	// 台湾居民来往大陆通行证
	// 规则： 新版8位或18位数字， 旧版10位数字 + 英文字母
	// 样本： 12345678 或 1234567890B
	var reg = /^\d{8}|^[a-zA-Z0-9]{10}|^\d{18}$/;
	if (reg.test(card) === false) {
		return {
			'status': 0,
			'msg': '台湾居民来往大陆通行证号码不合规'
		};
	} else {
		return {
			'status': 1,
		};
	}
}

export function isPassPortCard(card) {
	// 护照
	// 规则： 14/15开头 + 7位数字, G + 8位数字, P + 7位数字, S/D + 7或8位数字,等
	// 样本： 141234567, G12345678, P1234567
	var reg = /^([a-zA-z]|[0-9]){5,17}$/;
	if (reg.test(card) === false) {
		return {
			'status': 0,
			'msg': '护照号码不合规'
		};
	} else {
		return {
			'status': 1,
		};
	}
}
// 根据参数日期获取具体日期信息
export const formatDate = function(date = new Date()) {
	let year = date.getFullYear();
	let month = (date.getMonth() + 1);
	let day = date.getDate();
	let week = ['天', '一', '二', '三', '四', '五', '六'][date.getDay()];

	const dateInfo = {
		date: new Date(date),
		dateStr: `${year}-${month.toString().padStart(2,'0')}-${day.toString().padStart(2,'0')}`,
		year,
		month,
		day,
		week,
		isToday: false
	}

	const today = new Date();
	// 判断是否为当天
	if (today.getFullYear() === year && (today.getMonth() + 1) === month && today.getDate() === day) {
		dateInfo['isToday'] = true;
	}
	return dateInfo;
};

// 根据日期 获取长度为dayLenth的日期数组

export const setNowDate = function(date = new Date(), step = 7) {
	let dayList = [];
	for (let i = 0; i < step; i++) {
		dayList.push(formatDate(i == 0 ? date : getDateByDate(date, 1)))
	}
	return dayList;
}

// 根据基准日期，获取长度为dayLenth的日期数组
export const setDate = function(date = new Date(), step = 7) {
	let weekData = [];
	const week = date.getDay() - 1;
	date = getDateByDate(date, week * -1);

	for (let i = 0; i < step; i++) {
		weekData.push(formatDate(i == 0 ? date : getDateByDate(date, 1)))
	}
	return weekData;
};

// 根据基准日期获取前后某天的日期对象
export const getDateByDate = function(date = new Date(), range = 0) {
	date.setDate(date.getDate() + range);
	return date;
};

/* 
  获取以baselineDate所在周的一周、前一周、下一周的日期和星期信息(切换周期也可通过参数dayLenth自行设置)
  baselineDate: 设置的基准日期(返回的日期列表的第一个日期)
  range: 以 baselineDate 为基准日期的前后天数范围(如基准日期的range为0，需要返回前7天日期，则range为-7，后7天则range为7)
  step: 需要获取的日期信息周期天数，默认获取baselineDate所在周的一周日期信息
 */
export const getWeekDate = ({
	baselineDate = new Date(),
	range = 0,
	step = 7
}) => {
	return setDate(getDateByDate(baselineDate, range), step);
};